This page last changed on Nov 09, 2006 by juanca.

Calculamos FIRSTk(X), para todo X ∈ (Σ ∪ N) de la siguiente manera:

  1. foreach a ∈ Σ do
         F(a) := {a}
  2. for each A ∈ N do
         if A→ε ∈ P then
              F(A) := {ε}
         else
              F(A) := ∅
  3. repeat
         for each A ∈ N do
              F'(A) := F(A)
         for each A → X1X2...Xn ∈ P do
              if n > 0 then
                   F(A) := F(A) ∪ F'(X1) ⋅k F'(X2) ⋅k ... ⋅k F'(Xn)
    until F(A) = F'(A) forall A ∈ N
  4. FIRSTk(X) := F(X) forall X ∈ (Σ ∪ N)

Como F(A) ∈ Σ0..k, y Σ0..k es finito, entonces debemos llegar a un punto en el cual todo F(A)=F'(A) (en que ninguno de los conjuntos crece) para todo A ∈ N. Entonces nos detenemos, y hacemos FIRSTk(A) = F(A).

Nótese que:

FIRSTk(αβ) = FIRSTk(α) ⋅k FIRSTk(β)

Entonces, calculamos FIRSTk(α), donde α=Y1Y2...Yn de la siguiente manera:

FIRSTk(α) = FIRSTk(Y1) ⋅k FIRSTk(Y2) ⋅k ... ⋅k FIRSTk(Yn)

o

FIRSTk(α) = FIRSTk(Y1 ⋅ FIRSTk(Y2 ⋅ ... ⋅ FIRSTk(Yn)))

Document generated by Confluence on Oct 04, 2010 11:24